package com.rao.springbootschoolshop.bean;

/**
 * ajax提交统一返回结果类
 */
public class Result<T> {
    private int code;//错误码
    private String msg; //返回的具体信息
    private T data; //定义返回的数据


    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    private Result() {} //构造函数私有化,不允许任意创建对象

    /**
     * 定义codemsg的私有化构造函数，不允许外部创建对象
     * @param codeMsg
     */
    private Result(CodeMsg codeMsg){
        if (codeMsg != null){
            this.code = codeMsg.getCode();
            this.msg = codeMsg.getMsg();
        }
    }

    /**
     * 定义传入指定数据对象和codemsg私有化构造函数，
     * @param data
     * @param codeMsg
     * @return
     */
    private  Result(T data,CodeMsg codeMsg){
        if (codeMsg != null){
            this.code = codeMsg.getCode();
            this.msg = codeMsg.getMsg();
        }
        this.data = data;
    }

    /**
     * 定义统一的成功返回方法。所有成功调用此方法
     * @param data
     * @param <T>
     * @return
     */
    public static <T>Result<T> success(T data){
        return new Result<T>(data,CodeMsg.SUCCESS);
    }

    /**
     * 定义统一的错误返回方法，所有错误调用此方法
     * @param codeMsg
     * @param <T>
     * @return
     */
    public static <T>Result<T> error(CodeMsg codeMsg){
        return new Result<T>(codeMsg);
    }

}
